﻿using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Collections.Generic;
using System.IO;
// 
// public class NGUICreateWindow : EditorWindow
// {
//     [MenuItem("NGUI/Open/CreateWindow", false, 9)]
//     [MenuItem("Assets/NGUI/CreateWindow", false, 0)]
//     static public void OpenAtlasMaker()
//     {
//         EditorWindow.GetWindow<NGUICreateWindow>(false, "CreateWindow", true);
//     }
// 
//     static string DefaultPath = "Assets/UIResources/Windows";
//     Dictionary<string, bool>[] Paths = null;
//     Vector2 mScroll = Vector2.zero;
// 
//     void CheckSelectionList()
//     {
//         List<GameObject> SelectionObjs = new List<GameObject>(Selection.gameObjects);
//         for (int i = 0; i < SelectList.Count; )
//         {
//             if (SelectionObjs.Contains(SelectList[i]))
//                 ++i;
//             else
//                 SelectList.RemoveAt(i);
//         }
// 
//         foreach (GameObject go in Selection.gameObjects)
//         {
//             if (!SelectList.Contains(go))
//             {
//                 SelectList.Add(go);
//             }
//         }
//     }
// 
//     int frameCount = 0;
//     void Update()
//     {
//         frameCount++;
//         if (frameCount >= 30)
//         {
//             frameCount = 0;
//             Repaint();
//         }
//     }
// 
//     List<GameObject> SelectList = new List<GameObject>();
// 
//     void OnGUI()
//     {
//         ShowCreateBtn();
//         DrawWindowTree();
//         ShowControlBtn();
//     }
// 
//     static public void AddToChild(GameObject parent, GameObject child)
//     {
//         if (child != null && parent != null)
//         {
//             Transform t = child.transform;
//             t.parent = parent.transform;
//             t.localPosition = Vector3.zero;
//             t.localRotation = Quaternion.identity;
//             t.localScale = Vector3.one;
//         }
//     }
// 
//     // 设置位置,此为左上角位置
//     static public void SetPosition(GameObject obj, Vector3 position)
//     {
//         UIWidget widget = obj.GetComponent<UIWidget>();
//         if (widget != null)
//         {
//             Vector3 offset = widget.pivotOffset;
//             offset.x = offset.x * widget.width;
//             offset.y = offset.y * widget.height;
//             offset.z = 0;
//             widget.transform.localPosition = offset + position;
//         }
//         else
//         {
//             obj.transform.localPosition = position;
//         }
//     }
// 
//     // 得到位置
//     static public Vector3 GetPosition(GameObject obj)
//     {
//         UIWidget widget = obj.GetComponent<UIWidget>();
//         if (widget == null)
//             return obj.transform.localPosition;
// 
//         Vector3 offset = widget.pivotOffset;
//         offset.x = offset.x * widget.width;
//         offset.y = offset.y * widget.height;
//         offset.z = 0;
//         return widget.transform.localPosition - offset;
//     }
// 
//     static public Vector2 GetControlSize(GameObject obj)
//     {
//         UIWidget widget = obj.GetComponent<UIWidget>();
//         if (widget != null)
//         {
//             return new Vector2(widget.width, widget.height);
//         }
// 
//         return Vector2.zero;
//     }
// 
//     static public void SetControlSize(GameObject obj, Vector2 size)
//     {
//         UIWidget widget = obj.GetComponent<UIWidget>();
//         if (widget != null)
//         {
//             if (size.x > 2f)
//                 widget.width = Mathf.FloorToInt(size.x);
// 
//             if (size.y > 2f)
//                 widget.height = Mathf.FloorToInt(size.y);
//         }
//     }
// 
//     // 当前选中的文件
//     string selectfile;
// 
//     GameObject current;
// 
//     // 显示窗口树
//     void DrawWindowTree()
//     {
//         if (Paths == null)
//         {
//             Paths = new Dictionary<string, bool>[100];
//             for (int i = 0; i < Paths.Length; ++i)
//                 Paths[i] = new Dictionary<string, bool>();
//         }
// 
//         mScroll = GUILayout.BeginScrollView(mScroll, GUILayout.MaxHeight(400f));
//         if (Directory.Exists(DefaultPath))
//             ShowDirectories(DefaultPath, 0);
//         else
//             GUILayout.Label(string.Format("控件路径:{0}不存在!", DefaultPath));
// 
//         GUILayout.EndScrollView();
// 
//         if (selectfile == null)
//         {
//             NGUITools.Destroy(current);
//         }
//     }
// 
//     // 显示某个目录
//     void ShowDirectories(string path, int depth)
//     {
//         string[] paths = Directory.GetDirectories(path);
//         for (int i = 0; i < paths.Length; ++i)
//         {
//             string name = Path.GetFileName(paths[i]);
//             EditorGUILayout.BeginHorizontal();
//             Space(depth);
//             bool v = EditorGUILayout.Foldout(Paths[depth].ContainsKey(name), name);
//             EditorGUILayout.EndHorizontal();
//             if (v == true)
//                 Paths[depth][name] = true;
//             else if (Paths[depth].ContainsKey(name))
//                 Paths[depth].Remove(name); // 原先是选中，现在是没选中
// 
//             if (v == true)
//             {
//                 ShowDirectories(paths[i], depth + 1);
// 
//                 // 在此显示目录下的文件名以及目录
//                 string[] files = Directory.GetFiles(paths[i]);
//                 foreach (string file in files)
//                 {
//                     if (file.Length > 5 && file.Substring(file.Length - 5, 5) == ".meta")
//                         continue;
// 
//                     EditorGUILayout.BeginHorizontal();
//                     Space(depth + 1);
//                     bool Select = false;
// 
//                     GUI.backgroundColor = (selectfile == file) ? Color.white : new Color(0.8f, 0.8f, 0.8f);
//                     GUILayout.BeginHorizontal("AS TextArea", GUILayout.MinHeight(20f));
//                     GUI.backgroundColor = Color.white;
// 
//                     if (selectfile == file)
//                     {
//                         Select = GUILayout.Button(Path.GetFileName(file), "OL TextField", GUILayout.Height(20f));
//                         if (Select == true)
//                         {
//                             selectfile = "";
//                             NGUITools.Destroy(current);
//                         }
//                     }
//                     else
//                     {
//                         Select = GUILayout.Button(Path.GetFileName(file), "OL TextField", GUILayout.Height(20f));
//                         if (Select == true)
//                         {
//                             selectfile = file;
//                             NGUITools.Destroy(current);
//                             GameObject obj = (GameObject)AssetDatabase.LoadAssetAtPath(file, typeof(GameObject));
//                             current = NGUITools.AddChild(Selection.activeGameObject, obj);
//                             current.hideFlags = HideFlags.HideAndDontSave;
//                         }
//                     }
// 
//                     if (GUILayout.Button("Create", GUILayout.Width(100f), GUILayout.Height(20f)))
//                     {
//                         GameObject obj = (GameObject)AssetDatabase.LoadAssetAtPath(file, typeof(GameObject));
//                         GameObject prefab = (GameObject)UnityEditor.PrefabUtility.InstantiatePrefab(obj);
//                         AddToChild(GetShowParent(), prefab);
//                         Selection.activeGameObject = prefab;
//                         //SetHideInEditor(Selection.activeGameObject);
//                         if (file == selectfile)
//                         {
//                             selectfile = null;
//                             NGUITools.Destroy(current);
//                         }
//                     }
// 
//                     if (GUILayout.Button("ShowFile", GUILayout.Width(100f), GUILayout.Height(20f)))
//                     {
//                         Selection.activeGameObject = (GameObject)AssetDatabase.LoadAssetAtPath(file, typeof(GameObject));
//                     }
// 
//                     EditorGUILayout.EndHorizontal();
//                     EditorGUILayout.EndHorizontal();
//                 }
//             }
//         }
//     }
// 
//     public int xspace = 0;
//     public int yspace = 0;
//     public int linenum = 0;
//     public int offset = 0;
// 
//     // 显示对齐按钮
//     void ShowControlBtn()
//     {
//         CheckSelectionList();
//         int selectcount = SelectList.Count;
//         //Debug.Log("selectcount:" + selectcount);
//         Vector3 startPosition = Vector3.zero;
//         Vector3 startSize = Vector3.zero;
//         if (selectcount >= 2)
//         {
//             startPosition = GetPosition(SelectList[0]);
//             startSize = GetControlSize(SelectList[0]);
//         }
// 
//         int index = 0;
//         foreach (GameObject go in SelectList)
//         {
//             EditorGUILayout.ObjectField((++index).ToString(), go, typeof(GameObject));
//         }
// 
//         //         Color color = GUI.backgroundColor;
//         //         GUI.backgroundColor = (selectcount >= 2 ? color : Color.grey);
//         EditorGUILayout.BeginHorizontal();
//         offset = EditorGUILayout.IntField("offset", offset, GUILayout.Width(200), GUILayout.Height(20));
//         EditorGUILayout.EndHorizontal();
// 
//         EditorGUILayout.BeginHorizontal();
//         if (GUILayout.Button("左对齐", GUILayout.Width(100), GUILayout.Height(50)))
//         {
//             // 左对齐
//             if (selectcount >= 2)
//             {
//                 for (int i = 1; i < selectcount; ++i)
//                 {
//                     Vector3 newPosition = GetPosition(SelectList[i]);
//                     newPosition.x = startPosition.x;
//                     //newPosition.y = newPosition.y + offset;
//                     SetPosition(SelectList[i], newPosition);
//                 }
//             }
//         }
// 
//         if (GUILayout.Button("右对齐", GUILayout.Width(100), GUILayout.Height(50)))
//         {
//             // 右对齐
//             if (selectcount >= 2)
//             {
//                 float right = startPosition.x + startSize.x;
//                 for (int i = 1; i < selectcount; ++i)
//                 {
//                     Vector3 newPosition = GetPosition(SelectList[i]);
//                     Vector3 size = GetControlSize(SelectList[i]);
// 
//                     newPosition.x = right - size.x;
//                     SetPosition(SelectList[i], newPosition);
//                 }
//             }
//         }
// 
//         if (GUILayout.Button("顶对齐", GUILayout.Width(100), GUILayout.Height(50)))
//         {
//             // 顶对齐
//             if (selectcount >= 2)
//             {
//                 float bottom = startPosition.y + startSize.y;
//                 for (int i = 1; i < selectcount; ++i)
//                 {
//                     Vector3 newPosition = GetPosition(SelectList[i]);
//                     Vector3 size = GetControlSize(SelectList[i]);
//                     newPosition.y = bottom - size.y;
//                     SetPosition(SelectList[i], newPosition);
//                 }
//             }
//         }
// 
//         if (GUILayout.Button("底对齐", GUILayout.Width(100), GUILayout.Height(50)))
//         {
//             // 底对齐
//             if (selectcount >= 2)
//             {
//                 float top = startPosition.y;
//                 for (int i = 1; i < selectcount; ++i)
//                 {
//                     Vector3 newPosition = GetPosition(SelectList[i]);
//                     newPosition.y = top;
//                     SetPosition(SelectList[i], newPosition);
//                 }
//             }
//         }
// 
//         EditorGUILayout.EndHorizontal();
// 
//         EditorGUILayout.BeginHorizontal();
//         if (GUILayout.Button("同宽", GUILayout.Width(200), GUILayout.Height(50)))
//         {
//             for (int i = 1; i < selectcount; ++i)
//             {
//                 SetControlSize(SelectList[i], new Vector2(startSize.x, -1f));
//             }
//         }
// 
//         if (GUILayout.Button("同高", GUILayout.Width(200), GUILayout.Height(50)))
//         {
//             for (int i = 1; i < selectcount; ++i)
//             {
//                 SetControlSize(SelectList[i], new Vector2(-1f, startSize.y));
//             }
//         }
// 
//         EditorGUILayout.EndHorizontal();
// 
//         xspace = EditorGUILayout.IntField("X轴相隔", xspace, GUILayout.Width(200), GUILayout.Height(20));
//         yspace = EditorGUILayout.IntField("Y轴相隔", yspace, GUILayout.Width(200), GUILayout.Height(20));
//         linenum = EditorGUILayout.IntField("行个数", linenum, GUILayout.Width(200), GUILayout.Height(20));
// 
//         if (GUILayout.Button("分布", GUILayout.Width(200), GUILayout.Height(50)))
//         {
//             if (selectcount >= 2)
//             {
//                 float maxHeight = GetControlSize(SelectList[0]).y;
//                 Vector3 newPosition = startPosition;
//                 newPosition.x += (startSize.x + xspace);
//                 int cur = 1;
//                 for (int i = 1; i < selectcount; ++i)
//                 {
//                     if (cur >= linenum)
//                     {
//                         newPosition.x = startPosition.x;
//                         newPosition.y -= (maxHeight + yspace);
//                         maxHeight = 0; // 换行
//                         cur = 0;
//                     }
// 
//                     Vector2 curSize = GetControlSize(SelectList[i]);
//                     SetPosition(SelectList[i], newPosition);
//                     maxHeight = Mathf.Max(maxHeight, curSize.y);
//                     newPosition.x += (curSize.x + xspace);
//                     cur++;
//                 }
//             }
//         }
// 
//         // GUI.backgroundColor = color;
//     }
// 
//     // 显示创建按钮
//     void ShowCreateBtn()
//     {
//         EditorGUILayout.BeginHorizontal();
//         if (GUILayout.Button("Sprite", GUILayout.Width(100), GUILayout.Height(50)))
//             NGUIMenu.AddSprite();
//         if (GUILayout.Button("Label", GUILayout.Width(100), GUILayout.Height(50)))
//             NGUIMenu.AddLabel();
//         if (GUILayout.Button("Texture", GUILayout.Width(100), GUILayout.Height(50)))
//             NGUIMenu.AddTexture();
//         if (GUILayout.Button("Widget", GUILayout.Width(100), GUILayout.Height(50)))
//             NGUIMenu.AddWidget();
// 
//         EditorGUILayout.EndHorizontal();
//     }
// 
//     void SetHideInEditor(GameObject obj)
//     {
//         for (int i = 0; i < obj.transform.childCount; ++i)
//         {
//             obj.transform.GetChild(i).gameObject.hideFlags = HideFlags.HideInHierarchy;
//         }
//     }
// 
//     GameObject GetShowParent()
//     {
//         if (Selection.activeGameObject != null)
//             return Selection.activeGameObject;
// 
//         UICamera[] uis = NGUITools.FindActive<UICamera>();
//         if (uis == null || uis.Length == 0)
//         {
//             int layer = LayerMask.NameToLayer("UI");
//             NGUITools.CreateUI(false, layer == -1 ? 0 : layer);
//             uis = NGUITools.FindActive<UICamera>();
//         }
// 
//         return uis[0].gameObject;
//     }
// 
//     void Space(int depth)
//     {
//         GUILayout.Label("", GUILayout.Width(20 * depth));
//     }
// }
